Geography of Covid Vaccine Hesitancy in the U.S.

Anti-Vax Protesters in Texas

Introduction

Back in March, I created my PUG Shiny project with a focus on COVID vaccine distribution. At the time, the issue facing the united states was primarily one of distribution: people who wanted the vaccine couldn’t get it. Eligibility was restricted state by state to allocate a precious resource. Even people who were eligible needed to get lucky and navigate online sign up forms, vouching for fewer spots than people. Here’s my Shiny App, improved and updated with the latest data:

`

Motivation

Over the past six weeks, the supply chain has greatly improved, and access is no longer such a pressing issue. The issues facing the country have evolved: the issue now is acheiving heard immunity, and getting everyone vaccinated. In March, I didn’t know anyone who had gotten a vaccine. But now in April, I don’t know anyone who hasn’t gotten one. I wanted to map out where in the country people are the most hesitant to get vaccinated. Knowing the most resistant geographies could be useful information for government organizations to focus their vaccine advocacy efforts.

Working with Public Health Data Sets

Inter-Agency Knowledge Sharing

I investigated a CDC published dataset titled “Vaccine Hesitancy for COVID-19: County and local estimates.” The dataset comes from a publication by the ASPE, the Office of the Assistant Secretary for Planning and Evaluation, of the U.S. Department of Health and Human Services. Specifically, the data was collected via the U.S. Census Bureau’s Household Pulse Survey, 2021 Week 28, April 14-26.

Variables of Interest

The dataset contained several demographic variables measured for each U.S. county. The variables of interest for this project are “Estimated Hesitant” and “Estimated Strongly Hesitant”, which measure the percent of adults in each county who indicated they are either hesitant, or strongly hesitant, respectively, to get vaccinated. Due to the phrasing of the variable description, I assume that survey respondents who indicated either “Hesitant” or “Strongly Hesitant” are all adults who have not yet received a covid vaccine. You can check out the ASPE’s methodology for these estimates here.

Data Wrangling

Fauci with a headache, or …

fauchi

Data Wrangling

First, I cleaned up the CDC dataset:

my_data0 <- my_data %>%
  #select columns relevant to my investigation
  select(c("County Name","State","Estimated hesitant", "Estimated strongly hesitant","Social Vulnerability Index (SVI)","SVI Category","Ability to handle a COVID-19 outbreak (CVAC)","CVAC Category","Percent adults fully vaccinated against COVID-19 as of 3/30/2021"))%>%
  
  #change names to lowercase for easy merging with map dataset
  mutate(State = tolower(State), `County Name` = tolower(`County Name`))%>%
  
  #rename columns to r-friendly names
  rename(region = State, subregion = `County Name`) %>%
  rename(est_hesitant = "Estimated hesitant")%>%
  rename(est_strong_hesitant = "Estimated strongly hesitant")%>%
  rename(svi_cat = "SVI Category"  )%>%
  rename(svi = "Social Vulnerability Index (SVI)"  )%>%
  rename(pct_full_vaxed = "Percent adults fully vaccinated against COVID-19 as of 3/30/2021")

 #edit subregion (county name) values to match their equivs in map dataset
 my_data0$subregion <- str_remove(my_data0$subregion, " county.*")
 my_data0$subregion <- str_remove(my_data0$subregion, ",.*")

Then, I added mapping capabilites by merging my_data0 with the usa_counties dataset

usa_counties <- map_data(map = "county", region = ".")

my_data0_map <- my_data0 %>%
  inner_join(usa_counties, by =c("subregion", "region"))%>%
  rename(group_county = group)%>%
  rename(order_county = order)

Mapping County-Level Vaccine Hesitancy

Hesitancy Map

Strong Hesitancy Map

The Code behind it all

Mapping of County Vaccine “Hesitancy” Rates

ggplot(my_data0_map, aes(x = long, y = lat, group = group_county, fill = est_hesitant)) +
  geom_polygon(color = "white", size = 0.05) +
  theme_void() +
  coord_fixed(ratio = 1.3) +
  labs(fill = "Proportion of residents hesitant to be vaccinated") +
  theme(legend.position="bottom")+
  scale_fill_distiller(palette = "Spectral")

Mapping of strong hesitancy

ggplot(my_data0_map, aes(x = long, y = lat, group = group_county, fill = est_strong_hesitant)) +
  geom_polygon(color = "white", size = 0.05) +
  theme_void() +
  coord_fixed(ratio = 1.3) +
  labs(fill = "Proportion of residents STRONGLY hesitant to be vaccinated") +
  theme(legend.position="bottom")+
  scale_fill_distiller(palette = "Spectral")

H1: Analysis of Maps

I observed a striking visual pattern in this mapping of county hesitancy levels. In many regions of the map, I see geometries of similar colored counties juxtaposed with groups of different colored counties. For example, take a look at this region in the midwest:

The prevelance rates of strongly hesitant residents seems to be clustered into familiar state-shaped regions. I wanted to check how reasonable my hypothesis was,

From this test, it appears that county hesitancy rates are clustered state identity. Why else would we see such distinct patterns of hesitancy on state borders? I ran a cluser analysis to see if I was making this trend up or not.

Code

head(my_data0_map)


#standardizing values
std_both <- my_data0_map %>%
  select(est_hesitant, est_strong_hesitant, long, lat)%>%
  mutate_if(is.numeric, funs(`std`=scale(.) %>% as.vector())) %>% 
  janitor::clean_names() %>% 
  drop_na()


set.seed(23)
vars_std_hes <- c("est_hesitant_std","long_std", "lat_std")
km_std_hes <- kmeans(std_both[,vars_std_hes], centers=48)
vars_std_strong <- c("est_strong_hesitant_std","long_std", "lat_std")
km_std_strong <- kmeans(std_both[,vars_std_strong], centers=48)


# add cluster assignments to the data frame
map_std_both <- std_both %>%
  mutate(clust_std_hes = as.character(km_std_hes$cluster)
         ,clust_std_strong = as.character(km_std_strong$cluster))


#standardized
ggplot(data = map_std_both, aes(x = long_std, y = lat_std)) + 
  geom_point(aes(color = clust_std_hes)) +
  coord_fixed(ratio = 0.5)+
  labs(x = "x", y = "y" , color = "Cluster Assignment")+
  ggtitle("Lab-style Hesitant, standardized")

#standardized
ggplot(data = map_std_both, aes(x = long_std, y = lat_std)) + 
  geom_point(aes(color = clust_std_strong)) +
  coord_fixed(ratio = 0.5)+
  labs(x = "x", y = "y" , color = "Cluster Assignment")+
  ggtitle("Lab-style Strong Hesitant, standardized")

Maps

## # A tibble: 6 x 13
##   subregion region est_hesitant est_strong_hesi…   svi svi_cat `Ability to han…
##   <chr>     <chr>         <dbl>            <dbl> <dbl> <chr>              <dbl>
## 1 barbour   alaba…         0.23             0.11     1 Very H…             0.89
## 2 barbour   alaba…         0.23             0.11     1 Very H…             0.89
## 3 barbour   alaba…         0.23             0.11     1 Very H…             0.89
## 4 barbour   alaba…         0.23             0.11     1 Very H…             0.89
## 5 barbour   alaba…         0.23             0.11     1 Very H…             0.89
## 6 barbour   alaba…         0.23             0.11     1 Very H…             0.89
## # … with 6 more variables: `CVAC Category` <chr>, pct_full_vaxed <dbl>,
## #   long <dbl>, lat <dbl>, group_county <dbl>, order_county <int>
## # A tibble: 6 x 8
##   est_hesitant est_strong_hesi…  long   lat est_hesitant_std est_strong_hesi…
##          <dbl>            <dbl> <dbl> <dbl>            <dbl>            <dbl>
## 1         0.23             0.11 -85.4  31.6            0.725            0.573
## 2         0.23             0.11 -85.7  31.6            0.725            0.573
## 3         0.23             0.11 -85.7  31.7            0.725            0.573
## 4         0.23             0.11 -85.7  31.7            0.725            0.573
## 5         0.23             0.11 -85.7  31.7            0.725            0.573
## 6         0.23             0.11 -85.7  31.7            0.725            0.573
## # … with 2 more variables: long_std <dbl>, lat_std <dbl>

These clusters seem to be in the shape of states in some regions, so to check my hypothesis I overlaid the cluster maps with a us state map.